home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Maclife 157
/
MACLIFE157-2001-09.ISO.7z
/
MACLIFE157-2001-09.ISO
/
Linux
/
MacOS Tools
/
BootX 1.2.2
/
Sources
/
src
/
miboot
/
miBoot_boot4.c
< prev
next >
Wrap
C/C++ Source or Header
|
2001-07-23
|
2KB
|
114 lines
#include <Types.h>
#include <Memory.h>
#include <Errors.h>
#include <Files.h>
#include <Devices.h>
#include <TextUtils.h>
#include <LowMem.h>
#include <a4Stuff.h>
#include <Resources.h>
#include "uLibc.h"
#include "debug_text.h"
#include "nr_wrapper.h"
#include "zlib.h"
#include "elf_loader_defs.h"
#include "extract_dev_tree.h"
#include "bootx.h"
#include "LowLevelBoot.h"
#include "rs6000.h"
#include "boot.h"
#define DEBUG 0
/* Globals */
dt_context* dct = NULL;
UInt32 g_page_size = 4096;
Boolean g_arch_PCI = true;
#define KERNEL_ELF 0x01
#define KERNEL_XCOFF 0x02
#define KERNEL_GZIPPED 0x04
static check_one_key(KeyMap map, UInt8 key_code)
{
return ((((UInt8 *)map)[key_code >> 3] >> (key_code & 7)) & 1);
}
static Boolean
check_shift_key(void)
{
KeyMap keys;
GetKeys(keys);
return (check_one_key(keys, 0x38));
}
/* Todo: This file is no longer needed. */
void main(dt_context *input_context, Boolean no_video)
{
Ptr k;
UInt32 ks;
Handle cmd;
int flags;
UInt8 *rd, *kern;
UInt32 rds;
static boot_file_t kfile;
static boot_file_t rfile;
static boot_kernel_desc_t kdesc;
static boot_ramdisk_desc_t rdesc;
static boot_params_t params;
static Boolean has_rd;
EnterCodeResource();
dct = input_context;
dt_printf(dct, "¥nLow-level entry...¥n");
dt_printf(dct, "Initialize Name Registry wrappers...¥n");
g_arch_PCI = (init_nr_wrappers() == noErr);
dt_printf(dct, "Loading kernel...¥n");
memset(&kfile, 0, sizeof(kfile));
memset(&rfile, 0, sizeof(rfile));
memset(&kdesc, 0, sizeof(kdesc));
memset(&rdesc, 0, sizeof(rdesc));
memset(¶ms, 0, sizeof(params));
GetIndString(kfile.spec.name, 128, 1);
GetIndString(rfile.spec.name, 129, 1);
kfile.rn = rfile.rn = -1;
kfile.name = kfile.spec.name;
rfile.name = rfile.spec.name;
kfile.spec.vRefNum = rfile.spec.vRefNum = -1;
kfile.spec.parID = rfile.spec.parID = 2;
if (!check_kernel_file(&kfile, &kdesc, &rdesc, &has_rd)) {
dt_printf(dct, "Kernel not found !¥n");
return;
}
if (!has_rd && rfile.spec.name[0])
has_rd = check_ramdisk_file(&rfile, &rdesc);
/* Check shift again (easier to catch here) */
no_video = check_shift_key();
cmd = GetResource('CMDL', no_video ? 129 : 128);
if (cmd) {
DetachResource(cmd);
HLock(cmd);
}
params.args = *cmd;
// params.no_relocation = true;
do_boot(&kdesc, &rdesc, ¶ms);
if (cmd)
DisposeHandle(cmd);
fail:
dt_printf(dct, "Exiting...¥n");
dispose_nr_wrappers();
ExitCodeResource();
}